package com.itheima.task;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Demo3 {
    /*
    * 定义一个标准的JavaBean，名叫Person，包含属性name、age。
        使用反射的方式创建一个实例、调用构造函数初始化name、age，使用反射方式调用setName方法对名称进行设置，
        不使用setAge方法直接使用反射方式对age赋值。
    * */
    public static void main(String[] args) throws Exception {
        Class clazz = Class.forName("com.itheima.task.Person");
        Constructor cr = clazz.getConstructor(String.class, int.class);
        Person person = (Person) cr.newInstance("张三", 24);
        Method method = clazz.getMethod("setName",String.class);
        method.invoke(person,"李四");
        System.out.println(person);

        //暴力反射成员变量
        Field declaredField =  clazz.getDeclaredField("age");
        declaredField.setAccessible(true);
        declaredField.set(person,36);
        System.out.println(person);
    }
}
